package com.chuyu.cy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chuyu.cy.contants.PageResult;
import com.chuyu.cy.entity.domain.TemporaryNeeds;
import com.chuyu.cy.entity.dto.NeedDTO;
import com.chuyu.cy.entity.vo.NeedsVO;

/**
* @author 周小白
* @description 针对表【temporary_needs(临时需求表)】的数据库操作Service
*/
public interface TemporaryNeedsService extends IService<TemporaryNeeds> {


    /**
     * 获取需求列表
     * @param kindId 需求类型id
     * @return 需求列表
     */
    PageResult<NeedsVO> getNeedsList(Integer kindId, Integer pageNum, Integer pageSize);



    /**
     * 修改需求信息
     * @param needDTO 需求信息
     * @return 修改结果
     */
    Integer updateNeeds(NeedDTO needDTO);



    /**
     * 删除需求
     * @param id 需求id
     * @return 删除结果
     */
    boolean deleteNeed(Integer id);




    /**
     * 获取用户发布的需求列表
     * @param userId  用户id
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 需求列表
     */
    PageResult<NeedsVO> getPublishedNeedsList(Integer userId, Integer pageNum, Integer pageSize);




    /**
     * 获取用户匹配的需求列表
     * @param userId 用户id
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 需求列表
     */
    PageResult<NeedsVO> getMatchedNeedsList(Integer userId, Integer pageNum, Integer pageSize);





    /**
     * 获取用户未评价的需求列表
     * @param userId 用户id
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 需求列表
     */
    PageResult<NeedsVO> getUnratedNeedsList(Integer userId, Integer pageNum, Integer pageSize);




    /**
     * 获取用户已评分的需求列表
     * @param userId 用户id
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 需求列表
     */
    PageResult<NeedsVO> getRatedNeedsList(Integer userId, Integer pageNum, Integer pageSize);




    /**
     * 需求匹配
     * @param needId 需求id
     * @param matcherId 匹配者id
     * @return 匹配结果
     */
    boolean needMatched(Integer needId, Integer matcherId);



    /**
     * 发布者评分
     * @param needId 需求id
     * @param score 评分
     * @return 评分结果
     */
    boolean publisherRate(Integer needId, Integer score);




    /**
     * 匹配者评分
     * @param needId 需求id
     * @param score 评分
     * @return 评分结果
     */
    boolean matcherRate(Integer needId, Integer score);


    /**
     * 发布需求
     * @param needDTO 需求信息
     * @param userId 用户id
     * @return 发布结果
     */
    boolean insertNeeds(NeedDTO needDTO, Integer userId);



    /**
     * 搜索需求
     * @param keyword 关键字
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 需求列表
     */
    PageResult<NeedsVO> searchNeeds(String keyword, Integer pageNum, Integer pageSize);


    /**
     * 获取需求详情
     * @param id 需求id
     * @return 需求详情
     */
    NeedsVO getNeedsDetail(Integer id);
}
